// 项目状态管理仓库
/*
    什么是vuex?
    Vuex是Vue共享状态的集中式管理公祖
    vuex中的Store是什么？
    Store是Vuex仓库中用于存储状态的事务
    Vuex中有哪些属性？
    1.state 仓库的初始化状态
    2.Getter Vuex的派生状态 （计算属性  不会改变初始的状态值）
    3.mutation 改变Vuex中初始化状态的唯一方法
    4.actions 异步改变初始化的状态
    5.module 模板化的Vuex
*/
import Vue from "vue";
import Vuex from "vuex";
import order from "./modules/order";
import shop from "./modules/shop";
import user from "./modules/user";
Vue.use(Vuex); //注册Vuex
const state = {
  name: "咱班kw16"
}
// Getters 不会改变初始化状态 
const getters = {
  // 不带参数的派生状态
  webFrontEndkw16: (state) => {
    console.log(state); //仓库初始化属性
    // 派生状态 必须要return
    return state.name + "的班长永远的是我们的班长"
  },
  // 带参数的派生状态
  webFrontEnd: state => val => state.name + val
}
const mutations = {
    // 不带参
    // state初始化状态值
    changStorevalue(state){
        console.log(state)
        state.name = "金老师的弟子"
    },
    // 带参数的改变初始状态
    withTheCords(state , name){
        console.log(state)//初始化的状态
        console.log(name)//入参的对象
        state.name = name.name;
    }
}
const actions = {
    // actions必须要写异步的、
    // 定时器 ajax Promise
    // 在项目中需要使用vuex里面来调接口时候我们会用actions来写 正常情况都是用mutation来写
    // 改变state中的数据
    changeAsync(context){
        setTimeout(()=>{
                console.log(context);//Store对象
                context.commit("changStorevalue");
        },1000)
    },
    changeAsyncCon(context , load){
        setTimeout(()=>{
            console.log(load)
            context.commit({
                type:"withTheCords",
                name:load.name
            })
        },2000)
    }
}
// 抛出Vuex对象
export default new Vuex.Store({
  state,
  getters,
  mutations,
  actions,
  modules:{
    order,
    shop,
    user
  }//模块化处理当前的vuex
})
